/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import controlador.ControladorJPanelOperaciones;
import dao.PersonaDao;
import dao.SeccionDao;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import modelo.Amigo;
import modelo.Persona;
import modelo.Seccion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Elias Mendoza
 */
public class ModuloOperaciones extends Thread {

  ControladorJPanelOperaciones driver;
  private int tarea;
  private JTable tabla;
  private Object[] elementos;
  private DefaultTableModel modelo;
//  private JDialogBarra dialog;
//  private JProgressBar barra;
  private int con ;

  public ModuloOperaciones(ControladorJPanelOperaciones driver) {
    this.driver = driver;
    this.tabla = driver.panel.jTable;
//    dialog = new JDialogBarra(null, false);
//    barra = dialog.jProgressBar1;
//    barra.setMinimum(0);
//    barra.setMaximum(100);
//    barra.setBorderPainted(true);
//    barra.setStringPainted(true);
//    barra.setValue(0);
    con = 1;
    
  }

  public void setTarea(int tarea) {
    this.tarea = tarea;
  }

  @Override
  public void run() {
    switch (tarea) {
      case 1:
        consultaSeccion(driver.panel.jTextFieldNumero.getText(), driver.panel.jLabelNumeroReg);
        break;
      case 2:
        consultaAmigo(driver.panel.jTextFieldNombreAmigo.getText(), driver.panel.jTextFieldApPatAmigo.getText(), driver.panel.jTextFieldFolio.getText(), driver.panel.jLabelNumeroReg);
        break;
      case 3:
        consultaPersonas(driver.panel.jTextFieldNombrePers.getText(), driver.panel.jTextFieldApePatPersona.getText(), driver.panel.jTextFieldApMatPersona.getText(), driver.panel.jLabelNumeroReg);
        break;
    }
  }

  public void consultaSeccion(String numero, JLabel label_numero_reg) {
    String[] columnas = {"Numero", "Colonias", "Localidad", "No. Personas"};
    inicializaTabla(columnas);
    SeccionDao s = new SeccionDao();
    DetachedCriteria query = DetachedCriteria.forClass(Seccion.class);
    boolean buscarentodo = true;
    List lista = null;
    if (!numero.equals("")) {
      System.out.println("dentro del if");
      query.add(Restrictions.eq("numero", Integer.parseInt(numero)));
      buscarentodo = false;
    }
//    dialog.setVisible(true);
    if (buscarentodo) {
      if (JOptionPane.showConfirmDialog(null, "Decea buscar en todos los registros") == 0) {
        lista = s.consultaSecciones(query); 
//        barra.setMaximum(lista.size()-1);
        
        for (Object obj : lista) {
//          barra.setValue(con++);
          Object[] array = (Object[]) obj;
          addFila(array);
        }
      }
    } else {

      lista = s.consultaSecciones(query);
      if (!lista.isEmpty()) {
//        barra.setMaximum(lista.size());
      
        for (Object obj : lista) {
//          barra.setValue(con++);
          Object[] array = (Object[]) obj;
          addFila(array);
        }
      }

    }
    label_numero_reg.setText(lista.size() + "");
  }

  public void consultaAmigo(String nombre, String apellidos, String folio, JLabel label_numero_reg) {
    String[] columnas = {"Nombre", "Apellidos", "Direccion", "Folio", "Telefono1", "Telefono2"};
    inicializaTabla(columnas);
    DetachedCriteria query = DetachedCriteria.forClass(Amigo.class);
    boolean buscarentodo = true;
    List lista = null;
    if (!nombre.equals("")) {
      query.add(Restrictions.like("nombre", nombre));
      buscarentodo = false;
    }
    if (!apellidos.equals("")) {
      query.add(Restrictions.like("apellidos", apellidos));
      buscarentodo = false;
    }
    if (!folio.equals("")) {
      query.add(Restrictions.like("folio", Integer.parseInt(folio)));
      buscarentodo = false;
    }
//    dialog.setVisible(true);
    PersonaDao pd = new PersonaDao();
    if (buscarentodo) {
      if (JOptionPane.showConfirmDialog(null, "Decea buscar en todos los registros") == 0) {
        lista = pd.consultaPersona(query);
//        barra.setMaximum(lista.size());
        
        if (!lista.isEmpty()) {
//          dialog.setVisible(true);
          for (Object obj : lista) {
//            barra.setValue(con++);
            Amigo amigo = (Amigo) obj;
            Object[] elementosFila = {amigo.getNombre(), amigo.getApellidos(), amigo.getDireccion(),
              amigo.getFolio(), amigo.getTelefono1(), amigo.getTelefono2()};
            addFila(elementosFila);
          }
        }

      }
    } else {
      lista = pd.consultaPersona(query);
      if (!lista.isEmpty()) { 
//        barra.setMaximum(lista.size());
        for (Object obj : lista) {
       
          Amigo amigo = (Amigo) obj;
          Object[] elementosFila = {amigo.getNombre(), amigo.getApellidos(), amigo.getDireccion(),
            amigo.getFolio(), amigo.getTelefono1(), amigo.getTelefono2()};
          addFila(elementosFila);
        }
      }
    }
    label_numero_reg.setText(lista.size() + "");

  }

  public void consultaPersonas(String nombre, String apPaterno, String apMaterno, JLabel label_num_reg) {

    String[] columnas = {"Nombre", "Ap.Paterno", "Ap.Materno", "ClaveElector", "Sexo", "Calle", "Num.", "Colonia", "Seccion", "Telefono"};
    inicializaTabla(columnas);
//    barra.setValue(5);
    DetachedCriteria query = DetachedCriteria.forClass(Persona.class);
    boolean buscarentodo = true;
    List lista = null;
    if (!nombre.equals("")) {
      query.add(Restrictions.like("nombre", nombre));
      buscarentodo = false;
    }
    if (!apPaterno.equals("")) {
      query.add(Restrictions.like("apellidoPaterno", apPaterno));
      buscarentodo = false;
    }
    if (!apMaterno.equals("")) {
      query.add(Restrictions.like("apellidoMaterno", apMaterno));
      buscarentodo = false;
    }
//      dialog.setVisible(true);
    if (buscarentodo) {
      if (JOptionPane.showConfirmDialog(null, "Decea buscar en todos los registros") == 0) {
        PersonaDao pd = new PersonaDao();
        lista = pd.consultaPersona(query);
//        barra.setMaximum(lista.size());
    
        if (!lista.isEmpty()) {
          for (Object obj : lista) {
//            barra.setValue(con++);
            Persona persona = (Persona) obj;
            Object[] elementosFila = {persona.getNombre(), persona.getApellidoPaterno(), persona.getApellidoMaterno(),
              persona.getClaveElector(), persona.getSexo(), persona.getDireccion().getCalle(), persona.getDireccion().getNumero(),
              persona.getDireccion().getColonia(), persona.getSeccion().getNumero(), persona.getDireccion().getTelefono()};
            addFila(elementosFila);
          }
        }
      }
    } else {
      PersonaDao pd = new PersonaDao();
      lista = pd.consultaPersona(query);
//      barra.setMaximum(lista.size());
      if (!lista.isEmpty()) {
        for (Object obj : lista) {
          Persona persona = (Persona) obj;
          Object[] elementosFila = {persona.getNombre(), persona.getApellidoPaterno(), persona.getApellidoMaterno(),
            persona.getClaveElector(), persona.getSexo(), persona.getDireccion().getCalle(), persona.getDireccion().getNumero(),
            persona.getDireccion().getColonia(), persona.getSeccion().getNumero(), persona.getDireccion().getTelefono()};
          addFila(elementosFila);
        }
      }
    }
    label_num_reg.setText(lista.size() + "");
  }

  private void inicializaTabla(String[] columnas) {
    modelo = new DefaultTableModel();
    tabla.setModel(modelo);
    for (int i = 0; i < columnas.length; i++) {
      modelo.addColumn(columnas[i]);
    }
    elementos = new Object[columnas.length];
  }

  private void addFila(Object[] elemen) {
//    for (int i = 0; i < modelo.getColumnCount(); i++) {
//      elementos[i] = elemen[i];
//    }
//    copiando el arreglo element que contien los datos de la fila al arreglo que sera almacenado en la tabla
    System.arraycopy(elemen, 0, elementos, 0, elementos.length);
    modelo.addRow(elementos);
  }
}
